package com.shenhaofeng.app.widget.status;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ViewAnimator;

/**
 * 状态视图切换器,根据状态显示不同的布局改布局有且只有三个child view，从深到浅依次为loading error content
 * Created by haofeng on 2016/9/28.
 */

public class ViewStatusSwitcher extends ViewAnimator {


    private ErrorHandler mErrorHandler;

    public ViewStatusSwitcher(Context context) {
        super(context);
    }

    public ViewStatusSwitcher(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
     * 为错误页面提供一个错误码和页面状态映射的处理器
     * @param errorHandler
     */
    public void setErrorHandler(ErrorHandler errorHandler) {
        this.mErrorHandler = errorHandler;
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //检查布局
        if (getChildCount() != 3) {
            throw new IllegalStateException("ViewStatusSwitcher有且必有三个child view，从深到浅依次为loading error content");
        }
    }

    /**
     * 将布局切换为加载状态
     */
    public void showLoading() {
        setDisplayedChild(0);
    }

    /**
     * 显示错误页面
     *
     * @param errorCode 一个错误码,应该配合{@link ErrorHandler}来准确描述错误信息
     */
    public void showError(int errorCode) {
        setDisplayedChild(1);
        if (mErrorHandler != null) {
            mErrorHandler.onParseErrorCode(this, errorCode);
        }
    }

    /**
     * 显示错误页面,这个方法只显示静态的错误信息,无法改变错误描述，如果需要详细描述请查看{@link #showError(int)}
     */
    public void showError() {
        setDisplayedChild(1);
    }


    /**
     * 显示加载完成的内容界面
     */
    public void showContent() {
        setDisplayedChild(2);
    }
}
